// ignore_for_file: constant_identifier_names

import 'dart:collection';

import 'package:eq/src/core.dart';
import 'package:eq/src/flex.dart';
import 'package:eq/src/interpreter.dart';

///output 文件解析
///
///state 4    ---->当前状态值
///
///4 initial_declaration: require_list .---->当前规约规则1
///6 require_list: require_list . require_declaration---->当前规约规则2
///
///(1)IMPORT  shift, and go to state 1---->根据左边标志进入下一个状态值
///
///(2)$default  reduce using rule 4 (initial_declaration)
///---->如果没有左边标志则按该规则规约，并根据规则移除n个栈顶状态
///
///(3)require_declaration  go to state 61---->根据当前栈顶状态去往下一个状态
///
///
///
///(1) 这部分是所处状态去往下一个状态的标识符
///(2)规约规则,没有前往下一个状态的标识符则进行规约,
///   没有规约规则且也没有前往下一个状态的标志符则报错
///(3)根据当前规约规则完成规约后的栈顶状态前往下一个状态，
///   上例require_declaration如果栈顶0则去5，栈顶4则去61，栈顶值一般是当前状态值

///非终结符标志
enum ConExp {
  no_operate,
  expression,
  assignment_expression,
  logical_expression,
  equality_expression,
  relational_expression,
  additive_expression,
  multiplicative_expression,
  unary_expression,
  postfix_expression,
  primary_expression,
  array_literal,
  statement,
  const_statement,
  if_statement,
  while_statement,
  switch_statement,
  for_statement,
  return_statement,
  break_statement,
  continue_statement,
  try_statement,
  block_statement,
  block,
  translation_unit,
  initial_declaration,
  require_list,
  require_declaration,
  package_name,
  definition_or_statement,
  function_definition,
  expression_opt,
  identifier_list,
  identifier1,
  statement_list,
  expression_list,
  expression_list1,
  assignment_operator,
  argument_list,
  parameter_list,
  identifier2,
  case_list,
  one_case,
  default_opt,
  elsif_list,
  elsif,
}

bool yyParse(Module module) {
  ///规约栈
  List<TokenExpression> rules = List.empty(growable: true);

  ///状态栈
  List<int> status = List.empty(growable: true);
  TokenExpression tokenExpression = TokenExpression();
  bool needNextToken = true;
  ConExp conExp = ConExp.no_operate; //规约结果
  currentposL = 0;
  currentposH = 1;
  currentpos = 0;
  currentChar = 0;
  status.add(0); //添加初始状态
  Array array = Array(); //存储数组
  while (true) {
    switch (conExp) {
      case ConExp.no_operate:
        break;
      case ConExp.expression:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(37);
            break;
          case 22:
          case 69:
          case 174:
          case 207:
            status.add(72);
            break;
          case 32:
            status.add(83);
            break;
          case 67:
            status.add(129);
            break;
          case 68:
            status.add(130);
            break;
          case 70:
            status.add(132);
            break;
          case 123:
            status.add(166);
            break;
          case 213:
            status.add(222);
            break;
        }
        break;
      case ConExp.assignment_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 123:
          case 174:
          case 207:
          case 213:
            status.add(38);
            break;
          case 34:
          case 141:
            status.add(88);
            break;
          case 92:
            status.add(144);
            break;
          case 122:
            status.add(165);
            break;
          case 124:
            status.add(167);
            break;
          case 143:
            status.add(188);
            break;
          case 189:
            status.add(200);
            break;
          case 208:
            status.add(88);
            break;
        }
        break;
      case ConExp.logical_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(39);
            break;
        }
        break;
      case ConExp.equality_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(40);
            break;
          case 93:
            status.add(145);
            break;
          case 94:
            status.add(146);
            break;
          case 95:
            status.add(147);
            break;
          case 96:
            status.add(148);
            break;
          case 97:
            status.add(149);
            break;
        }
        break;
      case ConExp.relational_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 93:
          case 94:
          case 95:
          case 96:
          case 97:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(41);
            break;
          case 98:
            status.add(150);
            break;
          case 99:
            status.add(151);
            break;
        }
        break;
      case ConExp.additive_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 93:
          case 94:
          case 95:
          case 96:
          case 97:
          case 98:
          case 99:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(42);
            break;
          case 100:
            status.add(152);
            break;
          case 101:
            status.add(153);
            break;
          case 102:
            status.add(154);
            break;
          case 103:
            status.add(155);
            break;
        }
        break;
      case ConExp.multiplicative_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 93:
          case 94:
          case 95:
          case 96:
          case 97:
          case 98:
          case 99:
          case 100:
          case 101:
          case 102:
          case 103:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(43);
            break;
          case 104:
            status.add(156);
            break;
          case 105:
            status.add(157);
            break;
        }
        break;
      case ConExp.unary_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 93:
          case 94:
          case 95:
          case 96:
          case 97:
          case 98:
          case 99:
          case 100:
          case 101:
          case 102:
          case 103:
          case 104:
          case 105:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(44);
            break;
          case 29:
            status.add(79);
            break;
          case 30:
            status.add(81);
            break;
          case 31:
            status.add(82);
            break;
          case 106:
            status.add(158);
            break;
          case 107:
            status.add(159);
            break;
          case 108:
            status.add(160);
            break;
          case 109:
            status.add(161);
            break;
          case 110:
            status.add(162);
            break;
        }
        break;
      case ConExp.postfix_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(45);
            break;
          case 29:
          case 30:
          case 31:
          case 93:
          case 94:
          case 95:
          case 96:
          case 97:
          case 98:
          case 99:
          case 100:
          case 101:
          case 102:
          case 103:
          case 104:
          case 105:
          case 106:
          case 107:
          case 108:
          case 109:
          case 110:
            status.add(80);
            break;
        }
        break;
      case ConExp.primary_expression:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 29:
          case 30:
          case 31:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 93:
          case 94:
          case 95:
          case 96:
          case 97:
          case 98:
          case 99:
          case 100:
          case 101:
          case 102:
          case 103:
          case 104:
          case 105:
          case 106:
          case 107:
          case 108:
          case 109:
          case 110:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(46);
            break;
        }
        break;
      case ConExp.array_literal:
        switch (status.last) {
          case 2:
          case 3:
          case 22:
          case 29:
          case 30:
          case 31:
          case 32:
          case 33:
          case 34:
          case 67:
          case 68:
          case 69:
          case 70:
          case 85:
          case 92:
          case 93:
          case 94:
          case 95:
          case 96:
          case 97:
          case 98:
          case 99:
          case 100:
          case 101:
          case 102:
          case 103:
          case 104:
          case 105:
          case 106:
          case 107:
          case 108:
          case 109:
          case 110:
          case 122:
          case 123:
          case 124:
          case 141:
          case 143:
          case 174:
          case 189:
          case 208:
          case 207:
          case 213:
            status.add(47);
            break;
          case 135:
            status.add(184);
            break;
        }
        break;
      case ConExp.statement:
        switch (status.last) {
          case 2:
          case 3:
            status.add(48);
            break;
          case 33:
            status.add(86);
            break;
          case 85:
            status.add(140);
            break;
        }
        break;
      case ConExp.const_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(49);
            break;
        }
        break;
      case ConExp.if_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(50);
            break;
        }
        break;
      case ConExp.while_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(51);
            break;
        }
        break;
      case ConExp.switch_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(52);
            break;
        }
        break;
      case ConExp.for_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(53);
            break;
        }
        break;
      case ConExp.return_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(54);
            break;
        }
        break;
      case ConExp.break_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(55);
            break;
        }
        break;
      case ConExp.continue_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(56);
            break;
        }
        break;
      case ConExp.try_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(57);
            break;
        }
        break;
      case ConExp.block_statement:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(58);
            break;
        }
        break;
      case ConExp.block:
        switch (status.last) {
          case 2:
          case 3:
          case 33:
          case 85:
            status.add(59);
            break;
          case 21:
            status.add(71);
            break;
          case 170:
            status.add(192);
            break;
          case 172:
            status.add(195);
            break;
          case 173:
            status.add(196);
            break;
          case 194:
            status.add(202);
            break;
          case 203:
            status.add(212);
            break;
          case 211:
            status.add(221);
            break;
          case 214:
            status.add(223);
            break;
          case 224:
            status.add(230);
            break;
          case 225:
            status.add(231);
            break;
          case 226:
            status.add(232);
            break;
          case 228:
            status.add(233);
            break;
          case 229:
            status.add(234);
            break;
        }
        break;
      case ConExp.translation_unit:
        switch (status.last) {
          case 0:
            status.add(2);
            break;
        }
        break;
      case ConExp.initial_declaration:
        switch (status.last) {
          case 0:
            status.add(3);
            break;
        }
        break;
      case ConExp.require_list:
        switch (status.last) {
          case 0:
            status.add(4);
            break;
        }
        break;
      case ConExp.require_declaration:
        switch (status.last) {
          case 0:
            status.add(5);
            break;
          case 4:
            status.add(61);
            break;
        }
        break;
      case ConExp.package_name:
        switch (status.last) {
          case 1:
            status.add(7);
            break;
        }
        break;
      case ConExp.definition_or_statement:
        switch (status.last) {
          case 2:
            status.add(35);
            break;
          case 3:
            status.add(60);
            break;
        }
        break;
      case ConExp.function_definition:
        switch (status.last) {
          case 2:
          case 3:
            status.add(36);
            break;
        }
        break;
      case ConExp.expression_opt:
        switch (status.last) {
          case 22:
            status.add(73);
            break;
          case 69:
            status.add(131);
            break;
          case 174:
            status.add(197);
            break;
          case 207:
            status.add(216);
            break;
        }
        break;
      case ConExp.identifier_list:
        switch (status.last) {
          case 25:
            status.add(77);
            break;
        }
        break;
      case ConExp.identifier1:
        switch (status.last) {
          case 25:
            status.add(78);
            break;
          case 137:
            status.add(186);
            break;
        }
        break;
      case ConExp.statement_list:
        switch (status.last) {
          case 33:
            status.add(85);
            break;
        }
        break;
      case ConExp.expression_list:
        switch (status.last) {
          case 34:
            status.add(89);
            break;
        }
        break;
      case ConExp.expression_list1:
        switch (status.last) {
          case 34:
            status.add(90);
            break;
          case 141:
            status.add(187);
            break;
          case 208:
            status.add(217);
            break;
        }
        break;
      case ConExp.assignment_operator:
        switch (status.last) {
          case 45:
            status.add(124);
            break;
        }
        break;
      case ConExp.argument_list:
        switch (status.last) {
          case 122:
            status.add(164);
            break;
        }
        break;
      case ConExp.parameter_list:
        switch (status.last) {
          case 128:
            status.add(171);
            break;
        }
        break;
      case ConExp.identifier2:
        switch (status.last) {
          case 135:
            status.add(185);
            break;
        }
        break;
      case ConExp.case_list:
        switch (status.last) {
          case 198:
            status.add(209);
            break;
        }
        break;
      case ConExp.one_case:
        switch (status.last) {
          case 198:
            status.add(210);
            break;
          case 209:
            status.add(219);
            break;
        }
        break;
      case ConExp.default_opt:
        switch (status.last) {
          case 209:
            status.add(220);
            break;
        }
        break;
      case ConExp.elsif_list:
        switch (status.last) {
          case 195:
            status.add(205);
            break;
        }
        break;
      case ConExp.elsif:
        switch (status.last) {
          case 195:
            status.add(206);
            break;
          case 205:
            status.add(215);
            break;
        }
        break;
    }
    if (needNextToken) {
      tokenExpression = getToken();

      if (tokenExpression.tokenType == TokenType.Invalid) {
        exitApp(
            "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:${tokenExpression.error}",
            1);
      }
    }

    conExp = ConExp.no_operate;
    needNextToken = true;
    switch (status.last) {
      //分析栈顶状态
      case 0:
        if (tokenExpression.tokenType == TokenType.IMPORT) {
          status.add(1);
          rules.add(tokenExpression);
        } else {
          //3 initial_declaration: /* empty */
          conExp = ConExp.initial_declaration;
          needNextToken = false;
        }
        break;
      case 1:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(6);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:import语句错误",
              1);
        }
        break;
      case 2:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.FUNCTION:
            status.add(16);
            break;
          case TokenType.IF:
            status.add(17);
            break;
          case TokenType.WHILE:
            status.add(18);
            break;
          case TokenType.FOR:
            status.add(19);
            break;
          case TokenType.SWITCH:
            status.add(20);
            break;
          case TokenType.TRY:
            status.add(21);
            break;
          case TokenType.RETURN_T:
            status.add(22);
            break;
          case TokenType.BREAK:
            status.add(23);
            break;
          case TokenType.CONTINUE:
            status.add(24);
            break;
          case TokenType.CONST:
            status.add(25);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LC:
            status.add(33);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          case TokenType.END_OF_FILE:
            status.add(8);
            needNextToken = false;
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误1",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 3:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.FUNCTION:
            status.add(16);
            break;
          case TokenType.IF:
            status.add(17);
            break;
          case TokenType.WHILE:
            status.add(18);
            break;
          case TokenType.FOR:
            status.add(19);
            break;
          case TokenType.SWITCH:
            status.add(20);
            break;
          case TokenType.TRY:
            status.add(21);
            break;
          case TokenType.RETURN_T:
            status.add(22);
            break;
          case TokenType.BREAK:
            status.add(23);
            break;
          case TokenType.CONTINUE:
            status.add(24);
            break;
          case TokenType.CONST:
            status.add(25);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LC:
            status.add(33);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          case TokenType.END_OF_FILE: //处理文件中只写了import的情况以及文件没有内容
            status.add(8);
            needNextToken = false;
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误2",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 4:
        if (tokenExpression.tokenType == TokenType.IMPORT) {
          status.add(1);
          rules.add(tokenExpression);
        } else {
          //4 initial_declaration: require_list .
          conExp = ConExp.initial_declaration;
          status.removeLast();
          needNextToken = false;
        }
        break;
      case 5:
        //5 require_list: require_declaration .
        conExp = ConExp.require_list;
        status.removeLast();
        needNextToken = false;
        break;
      case 6:
        //9 package_name: IDENTIFIER .
        conExp = ConExp.package_name;
        status.removeLast();
        needNextToken = false;
        break;
      case 7:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(62);
        } else if (tokenExpression.tokenType == TokenType.DOT) {
          status.add(63);
        } else if (tokenExpression.tokenType == TokenType.AS) {
          status.add(64);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误3",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 8:
        rules.removeLast();
        return true;
      case 9:
        //70 primary_expression: INT_LITERAL .
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 10:
        //71 primary_expression: DOUBLE_LITERAL .
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 11:
        //72 primary_expression: COMPLEX_LITERAL .
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 12:
        //73 primary_expression: STRING_LITERAL .
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 13:
        //74 primary_expression: REGEXP_LITERAL .
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 14:
        if (tokenExpression.tokenType == TokenType.DOT) {
          status.add(65);
          rules.add(tokenExpression);
        } else {
          //68 primary_expression: IDENTIFIER .
          rules.last.expression.type = ExpressionType.IDENTIFIER_EXPRESSION;
          rules.last.expression.identifier = rules.last.identifier!;
          conExp = ConExp.primary_expression;
          status.removeLast();
          needNextToken = false;
        }
        break;
      case 15:
        //79 primary_expression: GLOBAL .
        rules.last.expression.type = ExpressionType.GLOBAL_EXPRESSION;
        rules.last.expression.identifier = rules.last.identifier!;
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 16:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(66);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误4",
              1);
        }
        break;
      case 17:
        if (tokenExpression.tokenType == TokenType.LP) {
          status.add(67);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误5",
              1);
        }
        break;
      case 18:
        if (tokenExpression.tokenType == TokenType.LP) {
          status.add(68);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误6",
              1);
        }
        break;
      case 19:
        if (tokenExpression.tokenType == TokenType.LP) {
          status.add(69);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误7",
              1);
        }
        break;
      case 20:
        if (tokenExpression.tokenType == TokenType.LP) {
          status.add(70);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误8",
              1);
        }
        break;
      case 21:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误9",
              1);
        }
        break;
      case 22:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            //124 expression_opt: /* empty */
            conExp = ConExp.expression_opt;
            needNextToken = false;
            break;
        }
        rules.add(tokenExpression);
        break;
      case 23:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(74);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误10",
              1);
        }
        break;
      case 24:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(75);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误11",
              1);
        }
        break;
      case 25:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(76);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误12",
              1);
        }
        break;
      case 26:
        //77 primary_expression: NULL_T .
        rules.last.expression.type = ExpressionType.NULL_EXPRESSION;
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 27:
        //75 primary_expression: TRUE_T .
        rules.last.expression.type = ExpressionType.BOOLEAN_EXPRESSION;
        rules.last.expression.boolvalue = true;
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 28:
        //76 primary_expression: FALSE_T .
        rules.last.expression.type = ExpressionType.BOOLEAN_EXPRESSION;
        rules.last.expression.boolvalue = false;
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 29:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误13",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 30:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误14",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 31:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误15",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 32:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误16",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 33:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.IF:
            status.add(17);
            break;
          case TokenType.WHILE:
            status.add(18);
            break;
          case TokenType.FOR:
            status.add(19);
            break;
          case TokenType.SWITCH:
            status.add(20);
            break;
          case TokenType.TRY:
            status.add(21);
            break;
          case TokenType.RETURN_T:
            status.add(22);
            break;
          case TokenType.BREAK:
            status.add(23);
            break;
          case TokenType.CONTINUE:
            status.add(24);
            break;
          case TokenType.CONST:
            status.add(25);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LC:
            status.add(33);
            break;
          case TokenType.RC:
            status.add(84);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误17",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 34:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          case TokenType.RB:
            status.add(87);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误18",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 35:
        //2 translation_unit: translation_unit definition_or_statement .
        conExp = ConExp.translation_unit;
        status.removeLast();
        status.removeLast();
        needNextToken = false;
        break;
      case 36:
        //11 definition_or_statement: function_definition .
        TokenExpression t1 = rules.removeLast();

        for (var entry in module.functionList) {
          if (entry.name == t1.identifier) {
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:函数重定义${t1.identifier}",
                1);
          }
        }
        FunctionDefinition functionDefinition;
        functionDefinition = FunctionDefinition(t1.identifier!, false);
        functionDefinition.block = t1.block;
        functionDefinition.parameter = t1.parameterList;
        module.functionList.add(functionDefinition);
        conExp = ConExp.definition_or_statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 37:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(91);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误19",
              1);
          return false;
        }
        break;
      case 38:
        //21 expression: assignment_expression .
        conExp = ConExp.expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 39:
        if (tokenExpression.tokenType == TokenType.BIT_AND) {
          status.add(93);
        } else if (tokenExpression.tokenType == TokenType.BIT_XOR) {
          status.add(94);
        } else if (tokenExpression.tokenType == TokenType.BIT_OR) {
          status.add(95);
        } else if (tokenExpression.tokenType == TokenType.LOGICAL_AND) {
          status.add(96);
        } else if (tokenExpression.tokenType == TokenType.LOGICAL_OR) {
          status.add(97);
        } else {
          //23 assignment_expression: logical_expression .
          conExp = ConExp.assignment_expression;
          status.removeLast();
          needNextToken = false;
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 40:
        if (tokenExpression.tokenType == TokenType.EQ) {
          status.add(98);
        } else if (tokenExpression.tokenType == TokenType.NE) {
          status.add(99);
        } else {
          //34 logical_expression: equality_expression .
          conExp = ConExp.logical_expression;
          status.removeLast();
          needNextToken = false;
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 41:
        if (tokenExpression.tokenType == TokenType.GT) {
          status.add(100);
        } else if (tokenExpression.tokenType == TokenType.GE) {
          status.add(101);
        } else if (tokenExpression.tokenType == TokenType.LT) {
          status.add(102);
        } else if (tokenExpression.tokenType == TokenType.LE) {
          status.add(103);
        } else {
          //40 equality_expression: relational_expression .
          conExp = ConExp.equality_expression;
          status.removeLast();
          needNextToken = false;
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 42:
        if (tokenExpression.tokenType == TokenType.ADD) {
          status.add(104);
        } else if (tokenExpression.tokenType == TokenType.SUB) {
          status.add(105);
        } else {
          //43 relational_expression: additive_expression .
          conExp = ConExp.relational_expression;
          status.removeLast();
          needNextToken = false;
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 43:
        if (tokenExpression.tokenType == TokenType.MUL) {
          status.add(106);
        } else if (tokenExpression.tokenType == TokenType.DIV) {
          status.add(107);
        } else if (tokenExpression.tokenType == TokenType.MOD) {
          status.add(108);
        } else if (tokenExpression.tokenType == TokenType.DOT_MUL) {
          status.add(109);
        } else if (tokenExpression.tokenType == TokenType.DOT_DIV) {
          status.add(110);
        } else {
          //48 additive_expression: multiplicative_expression .
          conExp = ConExp.additive_expression;
          status.removeLast();
          needNextToken = false;
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 44:
        //51 multiplicative_expression: unary_expression .
        conExp = ConExp.multiplicative_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 45:
        switch (tokenExpression.tokenType) {
          case TokenType.ASSIGN_T:
            status.add(111);
            break;
          case TokenType.MOD_ASSIGN_T:
            status.add(112);
            break;
          case TokenType.BIT_AND_ASSIGN_T:
            status.add(113);
            break;
          case TokenType.ADD_ASSIGN_T:
            status.add(114);
            break;
          case TokenType.SUB_ASSIGN_T:
            status.add(115);
            break;
          case TokenType.MUL_ASSIGN_T:
            status.add(116);
            break;
          case TokenType.DIV_ASSIGN_T:
            status.add(117);
            break;
          case TokenType.BIT_XOR_ASSIGN_T:
            status.add(118);
            break;
          case TokenType.BIT_OR_ASSIGN_T:
            status.add(119);
            break;
          case TokenType.INCREMENT:
            status.add(120);
            break;
          case TokenType.DECREMENT:
            status.add(121);
            break;
          case TokenType.LP:
            status.add(122);
            break;
          case TokenType.LB:
            status.add(123);
            break;
          default:
            //57 unary_expression: postfix_expression .
            conExp = ConExp.unary_expression;
            status.removeLast();
            needNextToken = false;
            continue;
        }
        rules.add(tokenExpression);
        break;
      case 46:
        //61 postfix_expression: primary_expression .
        conExp = ConExp.postfix_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 47:
        //78 primary_expression: array_literal .
        rules.last.expression.type = ExpressionType.ARRAY_EXPRESSION;
        rules.last.expression.array = array;
        array = Array();
        conExp = ConExp.primary_expression;
        status.removeLast();
        needNextToken = false;
        break;
      case 48:
        //12 definition_or_statement: statement .
        module.statementList.add(rules.removeLast().statement);
        conExp = ConExp.definition_or_statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 49:
        //95 statement: const_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        array = Array();
        break;
      case 50:
        //87 statement: if_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 51:
        //88 statement: while_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 52:
        //89 statement: switch_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 53:
        //90 statement: for_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 54:
        //91 statement: return_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 55:
        // 92 statement: break_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 56:
        //93 statement: continue_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 57:
        //94 statement: try_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 58:
        //96 statement: block_statement .
        conExp = ConExp.statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 59:
        //131 block_statement: block .
        rules.last.statement.type = StatementType.BLOCK_STATEMENT;
        rules.last.statement.blocks = BlockStatement(rules.last.block);
        conExp = ConExp.block_statement;
        status.removeLast();
        needNextToken = false;
        break;
      case 60:
        //1 translation_unit: initial_declaration definition_or_statement .
        conExp = ConExp.translation_unit;
        status.removeLast();
        status.removeLast();
        needNextToken = false;
        break;
      case 61:
        //6 require_list: require_list require_declaration .
        conExp = ConExp.require_list;
        status.removeLast();
        status.removeLast();
        needNextToken = false;
        break;
      case 62:
        //7 require_declaration: IMPORT package_name SEMICOLON .
        rules.removeLast();
        String packageName = rules.removeLast().identifier!;
        if (module.imp.containsKey(packageName.split('.').last) ||
            module.imp.containsValue(packageName)) {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:"
              "包名冲突${packageName.split('.').last}",
              1);
        }
        module.imp.putIfAbsent(packageName.split('.').last, () => packageName);

        rules.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        conExp = ConExp.require_declaration;
        needNextToken = false;
        break;
      case 63:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(125);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误20",
              1);
        }
        break;
      case 64:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(126);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误21",
              1);
        }
        break;
      case 65:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(127);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误22",
              1);
        }
        break;
      case 66:
        if (tokenExpression.tokenType == TokenType.LP) {
          status.add(128);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误23",
              1);
        }
        break;
      case 67:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误24",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 68:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误25",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 69:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            //124 expression_opt: /* empty */
            conExp = ConExp.expression_opt;
            TokenExpression t2 = TokenExpression();
            t2.expression.rowNum = rules.last.expression.rowNum;
            t2.expression.colNum = rules.last.expression.colNum;
            t2.expression.type = ExpressionType.NULL_EXPRESSION;
            rules.add(t2);
            needNextToken = false;
            break;
        }
        rules.add(tokenExpression);
        break;
      case 70:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误26",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 71:
        if (tokenExpression.tokenType == TokenType.CATCH) {
          status.add(133);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误27",
              1);
        }
        break;
      case 72:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
          rules.add(tokenExpression);
        } else {
          //125 expression_opt: expression .
          conExp = ConExp.expression_opt;
          status.removeLast();
          needNextToken = false;
        }
        break;
      case 73:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(134);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误28",
              1);
        }
        break;
      case 74:
        //127 break_statement: BREAK SEMICOLON .
        rules.removeLast();
        rules.last.statement.type = StatementType.BREAK_STATEMENT;
        conExp = ConExp.break_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 75:
        //128 continue_statement: CONTINUE SEMICOLON .
        rules.removeLast();
        rules.last.statement.type = StatementType.CONTINUE_STATEMENT;
        conExp = ConExp.continue_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 76:
        if (tokenExpression.tokenType == TokenType.ASSIGN_T) {
          status.add(135);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误29",
              1);
        }
        break;
      case 77:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(136);
        } else if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(137);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误30",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 78:
        //98 identifier_list: identifier1 .
        rules.last.identifierList.add(IdentifierList(rules.last.expression));
        conExp = ConExp.identifier_list;
        needNextToken = false;
        status.removeLast();
        break;
      case 79:
        //58 unary_expression: SUB unary_expression .
        var t1 = rules.removeLast().expression;
        rules.last.expression.type = ExpressionType.MINUS_EXPRESSION;
        rules.last.expression.minusExpression = t1;
        conExp = ConExp.unary_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 80:
        if (tokenExpression.tokenType == TokenType.INCREMENT) {
          status.add(120);
        } else if (tokenExpression.tokenType == TokenType.DECREMENT) {
          status.add(121);
        } else if (tokenExpression.tokenType == TokenType.LP) {
          status.add(122);
        } else if (tokenExpression.tokenType == TokenType.LB) {
          status.add(123);
        } else {
          //57 unary_expression: postfix_expression .
          conExp = ConExp.unary_expression;
          status.removeLast();
          needNextToken = false;
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 81:
        //59 unary_expression: EXCLAMATION unary_expression .
        var t1 = rules.removeLast().expression;
        rules.last.expression.type = ExpressionType.LOGICAL_NOT_EXPRESSION;
        rules.last.expression.minusExpression = t1;
        conExp = ConExp.unary_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 82:
        //60 unary_expression: BIT_NOT unary_expression .
        var t1 = rules.removeLast().expression;
        rules.last.expression.type = ExpressionType.BIT_NOT_EXPRESSION;
        rules.last.expression.minusExpression = t1;
        conExp = ConExp.unary_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 83:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(138);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误31",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 84:
        //133 block: LC RC .
        rules.removeLast();
        rules.last.block = Block()..statementList = LinkedList();
        conExp = ConExp.block;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 85:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.IF:
            status.add(17);
            break;
          case TokenType.WHILE:
            status.add(18);
            break;
          case TokenType.FOR:
            status.add(19);
            break;
          case TokenType.SWITCH:
            status.add(20);
            break;
          case TokenType.TRY:
            status.add(21);
            break;
          case TokenType.RETURN_T:
            status.add(22);
            break;
          case TokenType.BREAK:
            status.add(23);
            break;
          case TokenType.CONTINUE:
            status.add(24);
            break;
          case TokenType.CONST:
            status.add(25);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LC:
            status.add(33);
            break;
          case TokenType.RC:
            status.add(139);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误32",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 86:
        //19 statement_list: statement .
        rules.last.statementList.add(rules.last.statement);
        conExp = ConExp.statement_list;
        needNextToken = false;
        status.removeLast();
        break;
      case 87:
        //80 array_literal: LB RB .
        rules.removeLast();
        rules.last.expression.type = ExpressionType.ARRAY_EXPRESSION;
        conExp = ConExp.array_literal;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 88:
        //84 expression_list1: assignment_expression .
        rules.last.expressionList.add(rules.last.expression);
        conExp = ConExp.expression_list1;
        needNextToken = false;
        status.removeLast();
        break;
      case 89:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(141);
        } else if (tokenExpression.tokenType == TokenType.RB) {
          status.add(142);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误33",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 90:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(143);
          rules.add(tokenExpression);
        } else {
          //82 expression_list: expression_list1 .
          array.array.add(rules.last.expressionList);
          conExp = ConExp.expression_list;
          needNextToken = false;
          status.removeLast();
        }
        break;
      case 91:
        //86 statement: expression SEMICOLON .
        rules.removeLast();
        rules.last.statement.type = StatementType.EXPRESSION_STATEMENT;
        rules.last.statement.expressions = rules.last.expression;
        conExp = ConExp.statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 92:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误34",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 93:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误35",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 94:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误36",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 95:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误37",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 96:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误38",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 97:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误39",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 98:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误40",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 99:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误41",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 100:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误42",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 101:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误43",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 102:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误44",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 103:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误45",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 104:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误46",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 105:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误47",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 106:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误48",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 107:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误49",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 108:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误50",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 109:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误51",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 110:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误52",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 111:
        //25 assignment_operator: ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.NORMAL_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 112:
        //30 assignment_operator: MOD_ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.MOD_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 113:
        //32 assignment_operator: BIT_AND_ASSIGN_T .
        conExp = ConExp.assignment_operator;
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.BIT_AND_ASSIGN);
        needNextToken = false;
        status.removeLast();
        break;
      case 114:
        //26 assignment_operator: ADD_ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.ADD_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 115:
        //27 assignment_operator: SUB_ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.SUB_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 116:
        //28 assignment_operator: MUL_ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.MUL_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 117:
        //29 assignment_operator: DIV_ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.DIV_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 118:
        //31 assignment_operator: BIT_XOR_ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.BIT_XOR_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 119:
        //33 assignment_operator: BIT_OR_ASSIGN_T .
        rules.last.expression.assignExpression =
            AssignExpression(AssignmentOperator.BIT_OR_ASSIGN);
        conExp = ConExp.assignment_operator;
        needNextToken = false;
        status.removeLast();
        break;
      case 120:
        //62 postfix_expression: postfix_expression INCREMENT .
        rules.removeLast();
        var t1 = TokenExpression();
        t1.expression = Expression(ExpressionType.INCREMENT_EXPRESSION);
        t1.expression.rowNum =
            t1.expression.rowNum = rules.last.expression.rowNum;
        t1.expression.colNum =
            t1.expression.colNum = rules.last.expression.colNum;
        t1.expression.incDec =
            IncrementOrDecrement(rules.removeLast().expression);
        rules.add(t1);
        conExp = ConExp.postfix_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 121:
        //63 postfix_expression: postfix_expression DECREMENT .
        rules.removeLast();
        var t1 = TokenExpression();
        t1.expression.rowNum = rules.last.expression.rowNum;
        t1.expression.colNum = rules.last.expression.colNum;
        t1.expression.type = ExpressionType.DECREMENT_EXPRESSION;
        t1.expression.incDec =
            IncrementOrDecrement(rules.removeLast().expression);
        rules.add(t1);
        conExp = ConExp.postfix_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 122:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.RP:
            status.add(163);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误53",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 123:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误54",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 124:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误55",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 125:
        //10 package_name: package_name DOT IDENTIFIER .
        String temp = rules.removeLast().identifier!;
        rules.removeLast();
        rules.last.identifier = "${rules.last.identifier!}.$temp";
        conExp = ConExp.package_name;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 126:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(168);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误56",
              1);
        }
        break;
      case 127:
        //69 primary_expression: IDENTIFIER DOT IDENTIFIER .
        //模块调用表达式
        Expression t1 = Expression(ExpressionType.Invalid_EXPRESSION);
        t1.rowNum = rules.last.expression.rowNum;
        t1.colNum = rules.last.expression.colNum;
        t1.identifier = rules.removeLast().identifier!;
        rules.removeLast();
        var t2 = rules.removeLast();
        t1.type = ExpressionType.MODULE_CALL_EXPRESSION;
        t1.module = t2.identifier!;
        t2.expression = t1;
        rules.add(t2);
        conExp = ConExp.primary_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 128:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(169);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(170);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误57",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 129:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(172);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误58",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 130:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(173);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误59",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 131:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(174);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误60",
              1);
        }
        break;
      case 132:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(175);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误61",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 133:
        if (tokenExpression.tokenType == TokenType.LP) {
          status.add(176);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误62",
              1);
        }
        break;
      case 134:
        //126 return_statement: RETURN_T expression_opt SEMICOLON .
        rules.removeLast();
        var t1 = rules.removeLast().expression;

        rules.last.statement.type = StatementType.RETURN_STATEMENT;
        rules.last.statement.returns = ReturnStatement(t1);
        conExp = ConExp.return_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 135:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(177);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(178);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(179);
            break;
          case TokenType.STRING_LITERAL:
            status.add(180);
            break;
          case TokenType.NULL_T:
            status.add(181);
            break;
          case TokenType.TRUE_T:
            status.add(182);
            break;
          case TokenType.FALSE_T:
            status.add(183);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误63",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 136:
        //97 const_statement: CONST identifier_list SEMICOLON .
        rules.removeLast();
        var t1 = rules.removeLast().identifierList;
        var t2 = rules.removeLast();
        t2.statement.type = StatementType.CONST_STATEMENT;
        t2.statement.consts = ConstStatement(t1);
        rules.add(t2);
        conExp = ConExp.const_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 137:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(76);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误64",
              1);
        }
        break;
      case 138:
        //67 primary_expression: LP expression RP .
        rules.removeLast();
        var t1 = rules.removeLast().expression;
        rules.last.expression = t1;
        conExp = ConExp.primary_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 139:
        //132 block: LC statement_list RC .
        rules.removeLast();
        var t1 = rules.removeLast().statementList;
        rules.last.block.statementList = t1;

        conExp = ConExp.block;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 140:
        //20 statement_list: statement_list statement .
        var t1 = rules.removeLast().statement;
        rules.last.statementList.add(t1);
        conExp = ConExp.statement_list;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 141:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误65",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 142:
        //81 array_literal: LB expression_list RB .
        rules.removeLast();
        rules.removeLast();
        var t2 = rules.removeLast();
        t2.expression.type = ExpressionType.ARRAY_EXPRESSION;
        t2.expression.array = array;
        rules.add(t2);
        conExp = ConExp.array_literal;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 143:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误66",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 144:
        //22 expression: expression COMMA assignment_expression .
        var t1 = rules.removeLast().expression;
        rules.removeLast();
        var t2 = TokenExpression();
        t2.expression.rowNum = rules.last.expression.rowNum;
        t2.expression.colNum = rules.last.expression.colNum;
        t2.expression.type = ExpressionType.COMMA_EXPRESSION;
        t2.expression.comma =
            CommaExpression(rules.removeLast().expression, t1);
        rules.add(t2);
        conExp = ConExp.expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 145:
        if (tokenExpression.tokenType == TokenType.EQ) {
          status.add(98);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.NE) {
          status.add(99);
          rules.add(tokenExpression);
        } else {
          //37 logical_expression: logical_expression BIT_AND equality_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.BIT_AND_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);

          rules.add(t2);
          conExp = ConExp.logical_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 146:
        if (tokenExpression.tokenType == TokenType.EQ) {
          status.add(98);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.NE) {
          status.add(99);
          rules.add(tokenExpression);
        } else {
          //39 logical_expression: logical_expression BIT_XOR equality_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.BIT_XOR_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);

          rules.add(t2);
          conExp = ConExp.logical_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 147:
        if (tokenExpression.tokenType == TokenType.EQ) {
          status.add(98);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.NE) {
          status.add(99);
          rules.add(tokenExpression);
        } else {
          //38 logical_expression: logical_expression BIT_OR equality_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.BIT_OR_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);

          rules.add(t2);
          conExp = ConExp.logical_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 148:
        if (tokenExpression.tokenType == TokenType.EQ) {
          status.add(98);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.NE) {
          status.add(99);
          rules.add(tokenExpression);
        } else {
          //35 logical_expression: logical_expression LOGICAL_AND equality_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.LOGICAL_AND_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);

          rules.add(t2);
          conExp = ConExp.logical_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 149:
        if (tokenExpression.tokenType == TokenType.EQ) {
          status.add(98);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.NE) {
          status.add(99);
          rules.add(tokenExpression);
        } else {
          //36 logical_expression: logical_expression LOGICAL_OR equality_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.LOGICAL_OR_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);

          rules.add(t2);
          conExp = ConExp.logical_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 150:
        if (tokenExpression.tokenType == TokenType.GT) {
          status.add(100);
        } else if (tokenExpression.tokenType == TokenType.GE) {
          status.add(101);
        } else if (tokenExpression.tokenType == TokenType.LT) {
          status.add(102);
        } else if (tokenExpression.tokenType == TokenType.LE) {
          status.add(103);
        } else {
          //41 equality_expression: equality_expression EQ relational_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.EQ_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);

          rules.add(t2);
          conExp = ConExp.equality_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 151:
        if (tokenExpression.tokenType == TokenType.GT) {
          status.add(100);
        } else if (tokenExpression.tokenType == TokenType.GE) {
          status.add(101);
        } else if (tokenExpression.tokenType == TokenType.LT) {
          status.add(102);
        } else if (tokenExpression.tokenType == TokenType.LE) {
          status.add(103);
        } else {
          //42 equality_expression: equality_expression NE relational_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.NE_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);
          rules.add(t2);
          conExp = ConExp.equality_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 152:
        if (tokenExpression.tokenType == TokenType.ADD) {
          status.add(104);
        } else if (tokenExpression.tokenType == TokenType.SUB) {
          status.add(105);
        } else {
          //44 relational_expression: relational_expression GT additive_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.GT_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);
          rules.add(t2);
          conExp = ConExp.relational_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 153:
        if (tokenExpression.tokenType == TokenType.ADD) {
          status.add(104);
        } else if (tokenExpression.tokenType == TokenType.SUB) {
          status.add(105);
        } else {
          //45 relational_expression: relational_expression GE additive_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.GE_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);
          rules.add(t2);
          conExp = ConExp.relational_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 154:
        if (tokenExpression.tokenType == TokenType.ADD) {
          status.add(104);
        } else if (tokenExpression.tokenType == TokenType.SUB) {
          status.add(105);
        } else {
          //46 relational_expression: relational_expression LT additive_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.LT_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);
          rules.add(t2);
          conExp = ConExp.relational_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 155:
        if (tokenExpression.tokenType == TokenType.ADD) {
          status.add(104);
        } else if (tokenExpression.tokenType == TokenType.SUB) {
          status.add(105);
        } else {
          //47 relational_expression: relational_expression LE additive_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.LE_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);
          rules.add(t2);
          conExp = ConExp.relational_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 156:
        if (tokenExpression.tokenType == TokenType.MUL) {
          status.add(106);
        } else if (tokenExpression.tokenType == TokenType.DIV) {
          status.add(107);
        } else if (tokenExpression.tokenType == TokenType.MOD) {
          status.add(108);
        } else if (tokenExpression.tokenType == TokenType.DOT_MUL) {
          status.add(109);
        } else if (tokenExpression.tokenType == TokenType.DOT_DIV) {
          status.add(110);
        } else {
          //49 additive_expression: additive_expression ADD multiplicative_expression .
          var t1 = rules.removeLast().expression;
          var t3 = rules.removeLast();
          var t2 = TokenExpression();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.ADD_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);
          rules.add(t2);
          conExp = ConExp.additive_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 157:
        if (tokenExpression.tokenType == TokenType.MUL) {
          status.add(106);
        } else if (tokenExpression.tokenType == TokenType.DIV) {
          status.add(107);
        } else if (tokenExpression.tokenType == TokenType.MOD) {
          status.add(108);
        } else if (tokenExpression.tokenType == TokenType.DOT_MUL) {
          status.add(109);
        } else if (tokenExpression.tokenType == TokenType.DOT_DIV) {
          status.add(110);
        } else {
          //50 additive_expression: additive_expression SUB multiplicative_expression .
          var t1 = rules.removeLast().expression;

          var t2 = TokenExpression();
          var t3 = rules.removeLast();
          t2.expression.rowNum = t3.expression.rowNum;
          t2.expression.colNum = t3.expression.colNum;
          t2.expression.type = ExpressionType.SUB_EXPRESSION;
          t2.expression.binaryExpression =
              BinaryExpression(rules.removeLast().expression, t1);
          rules.add(t2);
          conExp = ConExp.additive_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          continue;
        }
        rules.add(tokenExpression);
        break;
      case 158:
        //52 multiplicative_expression: multiplicative_expression MUL unary_expression .
        var t1 = rules.removeLast().expression;
        var t3 = rules.removeLast();
        var t2 = TokenExpression();
        t2.expression.rowNum = t3.expression.rowNum;
        t2.expression.colNum = t3.expression.colNum;
        t2.expression.type = ExpressionType.MUL_EXPRESSION;
        t2.expression.binaryExpression =
            BinaryExpression(rules.removeLast().expression, t1);
        rules.add(t2);
        conExp = ConExp.multiplicative_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 159:
        //53 multiplicative_expression: multiplicative_expression DIV unary_expression .
        var t1 = rules.removeLast().expression;
        var t3 = rules.removeLast();
        var t2 = TokenExpression();
        t2.expression.rowNum = t3.expression.rowNum;
        t2.expression.colNum = t3.expression.colNum;
        t2.expression.type = ExpressionType.DIV_EXPRESSION;
        t2.expression.binaryExpression =
            BinaryExpression(rules.removeLast().expression, t1);
        rules.add(t2);
        conExp = ConExp.multiplicative_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 160:
        //54 multiplicative_expression: multiplicative_expression MOD unary_expression .
        var t1 = rules.removeLast().expression;
        var t3 = rules.removeLast();
        var t2 = TokenExpression();
        t2.expression.rowNum = t3.expression.rowNum;
        t2.expression.colNum = t3.expression.colNum;
        t2.expression.type = ExpressionType.MOD_EXPRESSION;
        t2.expression.binaryExpression =
            BinaryExpression(rules.removeLast().expression, t1);
        rules.add(t2);
        conExp = ConExp.multiplicative_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 161:
        //55 multiplicative_expression: multiplicative_expression DOT_MUL unary_expression .
        var t1 = rules.removeLast().expression;
        var t3 = rules.removeLast();
        var t2 = TokenExpression();
        t2.expression.rowNum = t3.expression.rowNum;
        t2.expression.colNum = t3.expression.colNum;
        t2.expression.type = ExpressionType.DOT_MUL_EXPRESSION;
        t2.expression.binaryExpression =
            BinaryExpression(rules.removeLast().expression, t1);
        rules.add(t2);
        conExp = ConExp.multiplicative_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 162:
        //56 multiplicative_expression: multiplicative_expression DOT_DIV unary_expression .
        var t1 = rules.removeLast().expression;
        var t3 = rules.removeLast();
        var t2 = TokenExpression();
        t2.expression.rowNum = t3.expression.rowNum;
        t2.expression.colNum = t3.expression.colNum;
        t2.expression.type = ExpressionType.DOT_DIV_EXPRESSION;
        t2.expression.binaryExpression =
            BinaryExpression(rules.removeLast().expression, t1);
        rules.add(t2);
        conExp = ConExp.multiplicative_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 163:
        //66 postfix_expression: postfix_expression LP RP .
        rules.removeLast();
        rules.removeLast();
        if ((rules.last.expression.type ==
                ExpressionType.IDENTIFIER_EXPRESSION) ||
            (rules.last.expression.type == ExpressionType.GLOBAL_EXPRESSION) ||
            (rules.last.expression.type ==
                ExpressionType.MODULE_CALL_EXPRESSION)) {
          var t2 = TokenExpression();
          t2.expression.rowNum = rules.last.expression.rowNum;
          t2.expression.colNum = rules.last.expression.colNum;
          t2.expression.functionCallExpression =
              FunctionCallExpression(rules.last.expression);
          t2.expression.functionCallExpression.argument = LinkedList();
          t2.expression.type = ExpressionType.FUNCTION_CALL_EXPRESSION;
          rules.removeLast();
          rules.add(t2);
          conExp = ConExp.postfix_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误67",
              1);
        }

        break;
      case 164:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(189);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(190);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误68",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 165:
        //17 argument_list: assignment_expression .
        rules.last.argumentList.add(ArgumentList(rules.last.expression));
        conExp = ConExp.argument_list;
        needNextToken = false;
        status.removeLast();
        break;
      case 166:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
        } else if (tokenExpression.tokenType == TokenType.RB) {
          status.add(191);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误69",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 167:
        //24 assignment_expression: postfix_expression assignment_operator assignment_expression .
        var t1 = rules.removeLast().expression;
        var t2 = rules.removeLast();
        var t3 = rules.removeLast().expression;

        t2.expression.type = ExpressionType.ASSIGN_EXPRESSION;
        t2.expression.assignExpression.left = t3;
        t2.expression.assignExpression.operand = t1;
        rules.add(t2);
        conExp = ConExp.assignment_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 168:
        //8 require_declaration: IMPORT package_name AS IDENTIFIER SEMICOLON .
        conExp = ConExp.require_declaration;
        rules.removeLast();
        String name = rules.removeLast().identifier!;

        rules.removeLast();
        String packageName = rules.removeLast().identifier!;
        if (module.imp.containsKey(name) ||
            module.imp.containsValue(packageName)) {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:包名冲突:$name",
              1);
        }
        module.imp.putIfAbsent(name, () => packageName);
        rules.removeLast();
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 169:
        //15 parameter_list: IDENTIFIER .
        rules.last.parameterList.add(Parameter(rules.last.identifier!));
        conExp = ConExp.parameter_list;
        needNextToken = false;
        status.removeLast();
        break;
      case 170:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误70",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 171:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(193);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(194);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误71",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 172:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误72",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 173:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误73",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 174:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            //124 expression_opt: /* empty */
            conExp = ConExp.expression_opt;
            needNextToken = false;
            break;
        }
        rules.add(tokenExpression);
        break;
      case 175:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(198);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误74",
              1);
        }
        break;
      case 176:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(199);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误75",
              1);
        }
        break;
      case 177:
        //101 identifier2: INT_LITERAL .
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 178:
        //102 identifier2: DOUBLE_LITERAL .
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 179:
        //103 identifier2: COMPLEX_LITERAL .
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 180:
        //104 identifier2: STRING_LITERAL .
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 181:
        //107 identifier2: NULL_T .
        rules.last.expression.type = ExpressionType.NULL_EXPRESSION;
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 182:
        //105 identifier2: TRUE_T .
        rules.last.expression.type = ExpressionType.BOOLEAN_EXPRESSION;
        rules.last.expression.boolvalue = true;
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 183:
        //106 identifier2: FALSE_T .
        rules.last.expression.type = ExpressionType.BOOLEAN_EXPRESSION;
        rules.last.expression.boolvalue = false;
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 184:
        //108 identifier2: array_literal .
        conExp = ConExp.identifier2;
        needNextToken = false;
        status.removeLast();
        break;
      case 185:
        //100 identifier1: IDENTIFIER ASSIGN_T identifier2 .

        TokenExpression f2 = TokenExpression();
        f2.expression.type = ExpressionType.ASSIGN_EXPRESSION;
        f2.expression.assignExpression =
            AssignExpression(AssignmentOperator.NORMAL_ASSIGN);
        f2.expression.assignExpression.operand = rules.removeLast().expression;

        f2.expression.colNum =
            f2.expression.colNum = rules.last.expression.colNum;
        f2.expression.rowNum =
            f2.expression.rowNum = rules.removeLast().expression.rowNum;
        f2.expression.assignExpression.left =
            Expression(ExpressionType.IDENTIFIER_EXPRESSION);
        f2.expression.assignExpression.left.identifier =
            rules.removeLast().identifier!;
        rules.add(f2);
        conExp = ConExp.identifier1;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 186:
        //99 identifier_list: identifier_list COMMA identifier1 .
        var t1 = rules.removeLast().expression;
        rules.removeLast();
        rules.last.identifierList.add(IdentifierList(t1));
        conExp = ConExp.identifier_list;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 187:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(143);
          rules.add(tokenExpression);
        } else {
          //83 expression_list: expression_list SEMICOLON expression_list1 .
          var t1 = rules.removeLast().expressionList;
          rules.removeLast();
          array.array.add(t1);
          conExp = ConExp.expression_list;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 188:
        //85 expression_list1: expression_list1 COMMA assignment_expression .
        var t1 = rules.removeLast().expression;
        rules.removeLast();
        rules.last.expressionList.add(t1);
        conExp = ConExp.expression_list1;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 189:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误76",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 190:
        //65 postfix_expression: postfix_expression LP argument_list RP .

        rules.removeLast();
        var t1 = rules.removeLast().argumentList;
        rules.removeLast();
        if ((rules.last.expression.type ==
                ExpressionType.IDENTIFIER_EXPRESSION) ||
            (rules.last.expression.type == ExpressionType.GLOBAL_EXPRESSION) ||
            (rules.last.expression.type ==
                ExpressionType.MODULE_CALL_EXPRESSION)) {
          var t2 = TokenExpression();
          t2.expression.functionCallExpression =
              FunctionCallExpression(rules.last.expression);
          t2.expression.type = ExpressionType.FUNCTION_CALL_EXPRESSION;
          t2.expression.functionCallExpression.argument = t1;
          t2.expression.rowNum = rules.last.expression.rowNum;
          t2.expression.colNum = rules.last.expression.colNum;
          rules.removeLast();
          rules.add(t2);
          conExp = ConExp.postfix_expression;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误77",
              1);
        }
        break;
      case 191:
        //64 postfix_expression: postfix_expression LB expression RB .
        rules.removeLast();
        var t1 = rules.removeLast().expression;
        rules.removeLast();
        var t2 = TokenExpression();
        t2.expression.rowNum = rules.last.expression.rowNum;
        t2.expression.colNum = rules.last.expression.colNum;
        t2.expression.type = ExpressionType.INDEX_EXPRESSION;
        t2.expression.indexExpression =
            IndexExpression(rules.removeLast().expression, t1);
        rules.add(t2);
        conExp = ConExp.postfix_expression;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 192:
        //14 function_definition: FUNCTION IDENTIFIER LP RP block .
        TokenExpression t1 = TokenExpression();
        t1.block = rules.removeLast().block;
        rules.removeLast();
        rules.removeLast();
        t1.identifier = rules.removeLast().identifier;
        t1.expression.rowNum = rules.last.expression.rowNum;
        t1.expression.colNum = rules.last.expression.colNum;
        rules.removeLast();
        rules.add(t1);
        conExp = ConExp.function_definition;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 193:
        if (tokenExpression.tokenType == TokenType.IDENTIFIER) {
          status.add(201);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误78",
              1);
        }
        break;
      case 194:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误79",
              1);
        }
        break;
      case 195:
        if (tokenExpression.tokenType == TokenType.ELSE) {
          status.add(203);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.ELSIF) {
          status.add(204);
          rules.add(tokenExpression);
        } else {
          //109 if_statement: IF LP expression RP block .
          var t1 = rules.removeLast().block;
          rules.removeLast();
          var t2 = rules.removeLast().expression;
          rules.removeLast();
          rules.last.statement.type = StatementType.IF_STATEMENT;
          rules.last.statement.ifs = IfStatement(t2, t1);

          conExp = ConExp.if_statement;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 196:
        //116 while_statement: WHILE LP expression RP block .
        var t1 = rules.removeLast().block;
        rules.removeLast();
        var t2 = rules.removeLast().expression;
        rules.removeLast();
        var t3 = rules.removeLast();
        t3.statement.type = StatementType.WHILE_STATEMENT;
        t3.statement.whiles = WhileStatement(t2, t1);
        rules.add(t3);
        conExp = ConExp.while_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 197:
        if (tokenExpression.tokenType == TokenType.SEMICOLON) {
          status.add(207);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误80",
              1);
        }
        break;
      case 198:
        if (tokenExpression.tokenType == TokenType.CASE) {
          status.add(208);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误81",
              1);
        }
        break;
      case 199:
        if (tokenExpression.tokenType == TokenType.RP) {
          status.add(211);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误82",
              1);
        }
        break;
      case 200:
        //18 argument_list: argument_list COMMA assignment_expression .
        Expression t1 = rules.removeLast().expression;
        rules.removeLast();
        rules.last.argumentList.add(ArgumentList(t1));
        conExp = ConExp.argument_list;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 201:
        //16 parameter_list: parameter_list COMMA IDENTIFIER .
        Parameter parameter = Parameter(rules.removeLast().identifier!);
        rules.removeLast();
        rules.last.parameterList.add(parameter);
        conExp = ConExp.parameter_list;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 202:
        //13 function_definition: FUNCTION IDENTIFIER LP parameter_list RP block .
        TokenExpression t1 = TokenExpression();
        t1.block = rules.removeLast().block;
        rules.removeLast();
        t1.parameterList = rules.removeLast().parameterList;
        rules.removeLast();
        t1.identifier = rules.removeLast().identifier;
        t1.expression.rowNum = rules.last.expression.rowNum;
        t1.expression.colNum = rules.last.expression.colNum;
        rules.removeLast();
        rules.add(t1);
        conExp = ConExp.function_definition;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 203:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误83",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 204:
        if (tokenExpression.tokenType == TokenType.LP) {
          status.add(213);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误84",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 205:
        if (tokenExpression.tokenType == TokenType.ELSE) {
          status.add(214);
          rules.add(tokenExpression);
        } else if (tokenExpression.tokenType == TokenType.ELSIF) {
          status.add(204);
          rules.add(tokenExpression);
        } else {
          //111 if_statement: IF LP expression RP block elsif_list .
          var t1 = rules.removeLast().elsifList;
          var t2 = rules.removeLast().block;
          rules.removeLast();
          var t3 = rules.removeLast().expression;
          rules.removeLast();
          rules.last.statement.type = StatementType.IF_STATEMENT;
          rules.last.statement.ifs = IfStatement(t3, t2);
          rules.last.statement.ifs.elsifList = t1;

          conExp = ConExp.if_statement;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 206:
        //113 elsif_list: elsif .
        rules.last.elsifList.add(rules.last.elsif);
        conExp = ConExp.elsif_list;
        needNextToken = false;
        status.removeLast();
        break;
      case 207:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            //124 expression_opt: /* empty */
            conExp = ConExp.expression_opt;
            needNextToken = false;
            break;
        }
        rules.add(tokenExpression);
        break;
      case 208:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误85",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 209:
        if (tokenExpression.tokenType == TokenType.CASE) {
          status.add(208);
        } else if (tokenExpression.tokenType == TokenType.DEFAULT) {
          status.add(218);
        } else {
          //121 default_opt: /* empty */
          tokenExpression.block = Block()..statementList = LinkedList();
          conExp = ConExp.default_opt;
          needNextToken = false;
        }
        rules.add(tokenExpression);
        break;
      case 210:
        //118 case_list: one_case .
        rules.last.caseList.add(rules.last.case_);
        conExp = ConExp.case_list;
        needNextToken = false;
        status.removeLast();
        break;
      case 211:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误86",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 212:
        //110 if_statement: IF LP expression RP block ELSE block .
        var t1 = rules.removeLast().block;
        rules.removeLast();
        var t2 = rules.removeLast().block;
        rules.removeLast();
        var t3 = rules.removeLast().expression;
        rules.removeLast();
        rules.last.statement.type = StatementType.IF_STATEMENT;
        rules.last.statement.ifs = IfStatement(t3, t2);
        rules.last.statement.ifs.elseblock = t1;
        conExp = ConExp.if_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 213:
        switch (tokenExpression.tokenType) {
          case TokenType.INT_LITERAL:
            status.add(9);
            break;
          case TokenType.DOUBLE_LITERAL:
            status.add(10);
            break;
          case TokenType.COMPLEX_LITERAL:
            status.add(11);
            break;
          case TokenType.STRING_LITERAL:
            status.add(12);
            break;
          case TokenType.REGEXP_LITERAL:
            status.add(13);
            break;
          case TokenType.IDENTIFIER:
            status.add(14);
            break;
          case TokenType.GLOBAL:
            status.add(15);
            break;
          case TokenType.NULL_T:
            status.add(26);
            break;
          case TokenType.TRUE_T:
            status.add(27);
            break;
          case TokenType.FALSE_T:
            status.add(28);
            break;
          case TokenType.SUB:
            status.add(29);
            break;
          case TokenType.EXCLAMATION:
            status.add(30);
            break;
          case TokenType.BIT_NOT:
            status.add(31);
            break;
          case TokenType.LP:
            status.add(32);
            break;
          case TokenType.LB:
            status.add(34);
            break;
          default:
            exitApp(
                "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误87",
                1);
        }
        rules.add(tokenExpression);
        break;
      case 214:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误88",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 215:
        //114 elsif_list: elsif_list elsif .
        var t1 = rules.removeLast().elsif;
        rules.last.elsifList.add(t1);
        conExp = ConExp.elsif_list;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 216:
        if (tokenExpression.tokenType == TokenType.RP) {
          status.add(224);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误89",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 217:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(143);
        } else if (tokenExpression.tokenType == TokenType.COLON) {
          status.add(225);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误90",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 218:
        if (tokenExpression.tokenType == TokenType.COLON) {
          status.add(226);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误91",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 219:
        //119 case_list: case_list one_case .
        var t1 = rules.removeLast().case_;
        rules.last.caseList.add(t1);
        conExp = ConExp.case_list;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        break;
      case 220:
        if (tokenExpression.tokenType == TokenType.RC) {
          status.add(227);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误92",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 221:
        if (tokenExpression.tokenType == TokenType.FINALLY) {
          status.add(228);
          rules.add(tokenExpression);
        } else {
          //130 try_statement:TRY block CATCH LP IDENTIFIER RP block .
          var t1 = rules.removeLast().block;
          rules.removeLast();
          var t2 = rules.removeLast().identifier;
          rules.removeLast();
          rules.removeLast();
          var t3 = rules.removeLast().block;
          rules.last.statement.type = StatementType.TRY_STATEMENT;
          TryStatement t4 = TryStatement(t3, t1, t2!);
          t4.finallyblock = Block()..statementList = LinkedList();
          rules.last.statement.trys = t4;
          conExp = ConExp.try_statement;
          needNextToken = false;
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
          status.removeLast();
        }
        break;
      case 222:
        if (tokenExpression.tokenType == TokenType.COMMA) {
          status.add(92);
        } else if (tokenExpression.tokenType == TokenType.RP) {
          status.add(229);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误93",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 223:
        //112 if_statement: IF LP expression RP block elsif_list ELSE block .
        var t1 = rules.removeLast().block;
        rules.removeLast();
        var t2 = rules.removeLast().elsifList;
        var t3 = rules.removeLast().block;
        rules.removeLast();
        var t4 = rules.removeLast().expression;
        rules.removeLast();
        rules.last.statement.type = StatementType.IF_STATEMENT;
        rules.last.statement.ifs = IfStatement(t4, t3);
        rules.last.statement.ifs.elsifList = t2;
        rules.last.statement.ifs.elseblock = t1;
        conExp = ConExp.if_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 224:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误94",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 225:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误95",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 226:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误96",
              1);
        }
        rules.add(tokenExpression);
        break;
      case 227:
        //117 switch_statement: SWITCH LP expression RP LC case_list default_opt RC .
        rules.removeLast();
        var t1 = rules.removeLast().block;
        var t2 = rules.removeLast().caseList;
        rules.removeLast();
        rules.removeLast();
        var t3 = rules.removeLast().expression;
        rules.removeLast();
        var t4 = rules.removeLast();
        t4.statement.type = StatementType.SWITCH_STATEMENT;
        t4.statement.switchs = SwitchStatement(t3, t2);
        t4.statement.switchs.defaultblock = t1;
        rules.add(t4);
        conExp = ConExp.switch_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 228:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误97",
              1);
        }
        break;
      case 229:
        if (tokenExpression.tokenType == TokenType.LC) {
          status.add(33);
          rules.add(tokenExpression);
        } else {
          exitApp(
              "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:语法错误98",
              1);
        }
        break;
      case 230:
        //123 for_statement: FOR LP expression_opt SEMICOLON expression_opt SEMICOLON expression_opt RP block .
        TokenExpression t2 = TokenExpression();
        t2.statement.type = StatementType.FOR_STATEMENT;
        t2.statement.fors = ForStatement(rules.removeLast().block);
        rules.removeLast();
        t2.statement.fors.post = rules.removeLast().expression;
        rules.removeLast();
        t2.statement.fors.condition = rules.removeLast().expression;
        rules.removeLast();
        t2.statement.fors.init = rules.removeLast().expression;
        rules.removeLast();
        t2.expression.colNum = rules.last.expression.colNum;
        t2.expression.rowNum = rules.removeLast().expression.rowNum;
        rules.add(t2);

        conExp = ConExp.for_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 231:
        //120 one_case: CASE expression_list1 COLON block .
        Block t1 = rules.removeLast().block;
        rules.removeLast();
        LinkedList<Expression> t2 = rules.removeLast().expressionList;
        rules.last.case_ = CaseList(t2, t1);
        conExp = ConExp.one_case;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 232:
        //122 default_opt: DEFAULT COLON block .
        var t1 = rules.removeLast().block;
        rules.removeLast();
        rules.last.block = t1;
        conExp = ConExp.default_opt;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 233:
        //129 try_statement: TRY block CATCH LP IDENTIFIER RP block FINALLY block .
        var t1 = rules.removeLast().block;
        rules.removeLast();
        var t2 = rules.removeLast().block;
        rules.removeLast();
        var t3 = rules.removeLast().identifier;
        rules.removeLast();
        rules.removeLast();
        var t4 = rules.removeLast().block;
        rules.last.statement.type = StatementType.TRY_STATEMENT;
        TryStatement t5 = TryStatement(t4, t2, t3!);
        t5.finallyblock = t1;
        rules.last.statement.trys = t5;
        conExp = ConExp.try_statement;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      case 234:
        //115 elsif: ELSIF LP expression RP block .
        var t1 = rules.removeLast().block;
        rules.removeLast();
        var t2 = rules.removeLast().expression;
        rules.removeLast();
        Elsif elsif = Elsif(t2, t1);
        rules.last.elsif = elsif;
        conExp = ConExp.elsif;
        needNextToken = false;
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        status.removeLast();
        break;
      default:
        exitApp(
            "[${tokenExpression.expression.rowNum}:${tokenExpression.expression.colNum}]:编译器未知状态错误:${status.toString()}",
            1);
    }
  }
}
